/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import BancoDeDados.CriaConexao;
import Logica.Equipamento;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Pedro H
 */
//O DAO (data acess object) é um padrão de acesso à dados, serve para desacoplar a camada de negócio (por exemplo) da camada de persitência.
//divide os comandos sql das classes normais
public class EquipamentoDao {

    private Connection conexao;

    /**
     * 
     * @throws SQLException 
     */
    public EquipamentoDao() throws SQLException {
        this.conexao = CriaConexao.getConexao();
    }

    /** 
     * função na qual adiciona os determinados valores no banco de dados.
     * @param eq
     * @throws SQLException 
     */
    public void adiciona(Equipamento eq) throws SQLException {//adiciona um contato no banco de dados. ele referencia o Contado do pac. logica!

        String sql = "insert into equipamento (nome, descricao) values(?,?)"; //o "?" indica que a gente naum sabe o que vai ter como valores

        PreparedStatement stmt = conexao.prepareStatement(sql);
        //seta os valores!!
        stmt.setString(1, eq.getNome());
        stmt.setString(2, eq.getDescricao());

        //executa o codigo sql!
        stmt.execute();
        stmt.close();
    }

    /**
     * 
     * @param nome
     * @return
     * @throws SQLException 
     */
    public List<Equipamento> getLista(String nome) throws SQLException {

        String sql = "select *from equipamento where nome like ? "; //seleciona tudo apenas do contato que for igual ao nome passado como parametro
        PreparedStatement stmt = this.conexao.prepareStatement(sql); //prepara a conexao com BD
        stmt.setString(1, nome);
        ResultSet rs = stmt.executeQuery();//executa o que esta encima. ele sempre retorna algo do tipo resultSet...è um ponteiro que anda pela tabela

        List<Equipamento> minhaLista = new ArrayList<Equipamento>();

        while (rs.next()) {
            Equipamento eq = new Equipamento();
            eq.setId(Long.valueOf(rs.getString("id"))); //"Long.valueOF" é um parse para o id
            eq.setNome(rs.getString("nome"));
            eq.setDescricao(rs.getString("descricao"));
            minhaLista.add(eq);
        }
        rs.close();
        stmt.close();
        return minhaLista;
    }

    /**
     * 
     * @param eq
     * @throws SQLException 
     */
    
    public void altera(Equipamento eq) throws SQLException{
        //update é o codigo de alteraçao do sql!
        String sql = "update equipamento set nome = ?,descricao = ? where id = ? ";
        PreparedStatement stmt = conexao.prepareStatement(sql);

       
        stmt.setString(1, eq.getNome());
        stmt.setString(2, eq.getDescricao());
        stmt.setLong(3, eq.getId());
        
        //executa o codigo sql!
        stmt.execute();
        stmt.close();
    }

    /**
     * 
     * @param eq
     * @throws SQLException 
     */
    public void remove(Equipamento eq) throws SQLException{

        String sql = "delete from equipamento where id = ?";
        PreparedStatement stmt = conexao.prepareStatement(sql);

        stmt.setLong(1, eq.getId());
        stmt.execute();
        stmt.close();
    }

}
